package com.sunday.shoufen.http;

import com.sunday.common.model.ResultDO;
import com.sunday.common.model.Version;
import com.sunday.shoufen.entity.Ad;
import com.sunday.shoufen.entity.Bank;
import com.sunday.shoufen.entity.BankAccount;
import com.sunday.shoufen.entity.BizShop;
import com.sunday.shoufen.entity.BizShopSet;
import com.sunday.shoufen.entity.CashRecord;
import com.sunday.shoufen.entity.City;
import com.sunday.shoufen.entity.Comment;
import com.sunday.shoufen.entity.ConfirmBuy;
import com.sunday.shoufen.entity.FanEntity;
import com.sunday.shoufen.entity.Fans;
import com.sunday.shoufen.entity.Income;
import com.sunday.shoufen.entity.IndexClassify;
import com.sunday.shoufen.entity.IndexData;
import com.sunday.shoufen.entity.Member;
import com.sunday.shoufen.entity.Order;
import com.sunday.shoufen.entity.PayInfo;
import com.sunday.shoufen.entity.RecordDetail;
import com.sunday.shoufen.entity.ShopDetail;
import com.sunday.shoufen.entity.ShopSetDetail;
import com.sunday.shoufen.entity.UploadImg;

import java.math.BigDecimal;
import java.util.List;

import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * Created by 刘涛 on 2017/10/17.
 */

public interface ApiService {

    /**
     * 发送验证码
     * 验证码类型 1注册 2修改密码 3忘记密码 4,绑定银行卡 5添加会员 其他的各个项目自己定义
     */
    @FormUrlEncoded
    @POST("/mobile/validCode/sendValidCode")
    Call<ResultDO> sendCode(@Field("mobile") String mobile, @Field("smsFreeSignName") String smsFreeSignName,
                            @Field("templateCode") String templateCode, @Field("type") int type);

    /**
     * 注册
     */
    @FormUrlEncoded
    @POST("/mobile/member/regist")
    Call<ResultDO<Member>> register(@Field("mobile") String mobile, @Field("validateCode") String validateCode, @Field("password") String password);


    /**
     * 登录
     * 登录方式 1手机号码(密码)
     */
    @FormUrlEncoded
    @POST("/mobile/member/login")
    Call<ResultDO<Member>> login(@Field("mobile") String mobile, @Field("password") String password);

    /**
     * 登录
     * 登录方式 1手机号码(密码)
     */
    @FormUrlEncoded
    @POST("/mobile/member/validateCodeLogin")
    Call<ResultDO<Member>> codeLogin(@Field("mobile") String mobile, @Field("validateCode") String validateCode);


    /**
     * 登录
     * 登录方式 1手机号码(密码)
     */
    @FormUrlEncoded
    @POST("/mobile/index/getData")
    Call<ResultDO<IndexData>> getIndexData(@Field("cityId") Integer cityId, @Field("latitude") String latitude,
                                           @Field("longitude") String longitude);


    /**
     * 店铺分类
     */
    @GET("/mobile/shop/shopCat")
    Call<ResultDO<List<IndexClassify>>> getShopCats();


    /**
     * 广告位
     * public static final String INDEX_BANNER="index-banner"; //首页轮播广告code
     * public static final String NEAR_BANNER="near-banner"; //附近轮播广告code
     * public static final String ACTIVE_BANNER="active-banner"; //商圈活动轮播广告code
     * public static final String ACTIVE_INDEX="active-index"; //首页商圈活动轮播广告code
     */
    @FormUrlEncoded
    @POST("/mobile/commons/getAdsByCode")
    Call<ResultDO<List<Ad>>> getAdsByCode(@Field("code") String code);


    /**
     * 店铺列表
     */
    @FormUrlEncoded
    @POST("/mobile/shop/shopList")
    Call<ResultDO<List<BizShop>>> getShopList(@Field("type") int type, @Field("latitude") String latitude,
                                              @Field("longitude") String longitude,
                                              @Field("pageNo") int pageNo, @Field("pageSize") int pageSize,
                                              @Field("tag") String tag, @Field("catId") Integer catId,
                                              @Field("keyWords") String keyWords, @Field("sortType") Integer sortType);

    /**
     * 店铺列表
     */
    @FormUrlEncoded
    @POST("/mobile/shop/shopList")
    Call<ResultDO<List<BizShop>>> getShopList1(@Field("type") int type, @Field("latitude") String latitude,
                                               @Field("longitude") String longitude,
                                               @Field("pageNo") int pageNo, @Field("pageSize") int pageSize,
                                               @Field("tag") String tag, @Field("catId") int catId);


    /**
     * 店铺详情
     */
    @FormUrlEncoded
    @POST("/mobile/shop/shopDetail")
    Call<ResultDO<ShopDetail>> getShopDetail(@Field("shopId") long shopId, @Field("latitude") String latitude,
                                             @Field("longitude") String longitude, @Field("memberId") Long memberId);

    /**
     * 产品详情
     */
    @FormUrlEncoded
    @POST("/mobile/shop/ProductDetail")
    Call<ResultDO<ShopSetDetail>> getProductDetail(@Field("productId") long productId, @Field("latitude") String latitude,
                                                   @Field("longitude") String longitude);

    /**
     * 消费积分/怀亚积分/积分收入/卡券余额/商家营收
     * type 1-消费积分 2-怀亚积分 3-积分收入 4-卡券余额 5-商家营收
     * memberType 1-用户 2-商家
     */
    @FormUrlEncoded
    @POST("/mobile/member/myAssets")
    Call<ResultDO<Income>> myAssets(@Field("memberId") long memberId, @Field("type") int type,
                                    @Field("memberType") int memberType);

    /**
     * 各种收益记录
     * type 1-消费积分 2-怀亚积分 3-积分收入 4-通用券余额 5-商家营收 6-怀亚积分的进出记录
     * memberType 1-用户 2-商家
     */
    @FormUrlEncoded
    @POST("/mobile/member/recordDetail")
    Call<ResultDO<List<RecordDetail>>> recordDetail(@Field("memberId") long memberId, @Field("type") int type,
                                                    @Field("memberType") int memberType, @Field("pageNo") int pageNo,
                                                    @Field("pageSize") int pageSize, @Field("date") String date);

    /**
     * 立即付款(买单)
     */
    @FormUrlEncoded
    @POST("/mobile/order/buyNow")
    Call<ResultDO<ConfirmBuy>> buyNow(@Field("sellerId") long sellerId, @Field("memberId") long memberId,
                                      @Field("productId") Long productId, @Field("num") Integer num,
                                      @Field("amount") String amount, @Field("memo") String memo);

    /**
     *
     *
     *
     */
    @FormUrlEncoded
    @POST("/mobile/order/getPayInfos")
    Call<ResultDO<PayInfo>> getPayInfos(@Field("orderNo") String orderNo, @Field("type") int type,
                                        @Field("ticketFee") BigDecimal ticketFee, @Field("discountType") int discountType);


    /**
     * 我的
     */
    @FormUrlEncoded
    @POST("/mobile/member/my")
    Call<ResultDO<Member>> getMemberInfo(@Field("memberId") long memberId);


    /**
     * 我的
     * memberType 1-用户 2-商家
     *
     * @param tag 1-钻石会员 2-黄金会员
     */
    @FormUrlEncoded
    @POST("/mobile/member/myMember")
    Call<ResultDO<FanEntity>> getMyMember(@Field("memberType") int memberType, @Field("memberId") long memberId,
                                          @Field("tag") int tag, @Field("pageNo") int pageNo, @Field("pageSize") int pageSize);


    /**
     * 我的 收藏
     * memberType 1-用户 2-商家
     *
     * @param
     */
    @FormUrlEncoded
    @POST("/mobile/commons/collectList")
    Call<ResultDO<List<BizShop>>> getCollectionList(@Field("memberId") long memberId, @Field("pageNo") int pageNo, @Field("pageSize") int pageSize, @Field("type") int type);


    /**
     * 订单列表
     *
     * @param
     */
    @FormUrlEncoded
    @POST("/mobile/order/orderList")
    Call<ResultDO<List<Order>>> getOrderList(@Field("memberId") long memberId, @Field("memberType") int memberType,
                                             @Field("pageNo") int pageNo, @Field("pageSize") int pageSize);

    /**
     * 多张图片上传
     */
    @Multipart
    @POST("/mobile/commons/multiImages")
    Call<ResultDO<List<UploadImg>>> uploadImgs(@Part("images") RequestBody body);

    /**
     * 单张图片上传
     */
    @Multipart
    @POST("/mobile/commons/singleImage")
    Call<ResultDO<UploadImg>> singleImage(@Part("image") RequestBody body);

    /**
     * 产品评论
     */
    @FormUrlEncoded
    @POST("/mobile/shop/commentShop")
    Call<ResultDO> commentShop(@Field("orderId") long orderId, @Field("memberId") Long memberId,
                               @Field("content") String content, @Field("score") float score,
                               @Field("images") String images);


    /**
     * 评论列表
     *
     * @param
     */
    @FormUrlEncoded
    @POST("/mobile/shop/commentList")
    Call<ResultDO<List<Comment>>> commentList(@Field("sellerId") long sellerId, @Field("pageNo") int pageNo,
                                              @Field("pageSize") int pageSize);

    /**
     * @param
     */
    @FormUrlEncoded
    @POST("/mobile/member/updateMember")
    Call<ResultDO<Member>> updateMember(@Field("memberId") long memberId, @Field("logo") String logo,
                                        @Field("nick") String nick, @Field("sex") Integer sex);


    /**
     * 修改密码
     */
    @FormUrlEncoded
    @POST("/mobile/member/findPwd")
    Call<ResultDO> findPwd(@Field("mobile") String mobile, @Field("validateCode") String validateCode, @Field("password") String password);


    /**
     * 收藏/取消收藏
     *
     * @param type 信息传1 产品传2 门店传3
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/commons/collect")
    Call<ResultDO> doCollect(@Field("objId") Long objId, @Field("memberId") long memberId, @Field("type") int type);


    /**
     * @param
     * @param
     * @return
     */
    @GET("/mobile/cash/getMemberCardList")
    Call<ResultDO<List<BankAccount>>> getMemberBank(@Query("memberId") long memberId,@Query("memberType")int memberType);

    /**
     * @param
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/cash/save")
    Call<ResultDO> saveBankAccount(@Field("bankId") Long bankId, @Field("memberId") long memberId, @Field("cardNo") String cardNo,
                                   @Field("name") String name, @Field("idCard") String idCard, @Field("mobile") String mobile,
                                   @Field("memberType")int memberType);


    /**
     * @param
     * @param
     * @return
     */
    @GET("/mobile/cash/getBankList")
    Call<ResultDO<List<Bank>>> getBankList();

    /**
     * @param
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/cash/deleteCard")
    Call<ResultDO> deleteCard(@Field("id") long id);


    /**
     * @param  memberType 用户类型 1-普通用户 2-商家
     * @param  cashType  提现类型 1-消费积分分红提现 2-怀亚积分分红提现 3-商家营收提现
     * @param  type   提现方式1 提现到银行卡 2提现到怀亚积分
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/cash/makeCash")
    Call<ResultDO> makeCash(@Field("memberId") long memberId, @Field("cardId") Long cardId, @Field("amount") String amount,
                            @Field("tradePwd") String tradePwd, @Field("type") int type,@Field("memberType")int memberType,
                            @Field("cashType")int cashType);

    /**
     * @param  memberType 用户类型 1-普通用户 2-商家
     * @param  cashType  提现类型 1-消费积分分红提现 2-怀亚积分分红提现 3-商家营收提现
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/cash/cashRecord")
    Call<ResultDO<List<CashRecord>>> cashRecord(@Field("memberId") long memberId, @Field("memberType")int memberType,
                                                @Field("cashType")int cashType, @Field("pageNo")int pageNo, @Field("pageSize")int pageSize);



    /**
     * 设置交易密码
     *
     * @param memberType 1普通用户 2-商家
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/member/setTradePwd")
    Call<ResultDO<Member>> setTradePwd(@Field("memberType") int memberType, @Field("memberId") long memberId, @Field("tradePwd") String tradePwd,
                                       @Field("validateCode") String validateCode);


    /**
     * @param
     * @param
     * @return
     */
    @GET("/mobile/receiveAddress/getAllCitys")
    Call<ResultDO<List<City>>> getAllCity();


    /**
     * @param
     * @param
     * @return
     */
    @GET("/mobile/index/getCityByLocation")
    Call<ResultDO<City>> getCityId(@Query("latitude") String latitude, @Query("longitude") String longitude);


    /**
     * @param
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/member/ticketFeeDetail")
    Call<ResultDO<List<RecordDetail>>> getTicketFeeDetail(@Field("memberId") long memberId, @Field("pageNo") int pageNo,
                                                    @Field("pageSize") int pageSize, @Field("type") int type);

    /**
     * @param
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/member/unbind")
    Call<ResultDO> unbindMember(@Field("userId") long userId);

    /**卡券转赠
     * @param
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/member/giveTicket")
    Call<ResultDO> giveTicket(@Field("ticketId") long ticketId,@Field("memberId")long memberId);


    /**卡券批量转赠
     * @param
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/member/giveTicket1")
    Call<ResultDO> giveMassTicket(@Field("memberId") long memberId,@Field("userId")long userId,@Field("amount")String amount);


    /**
     *
     *搜索会员
     *
     */
    @FormUrlEncoded
    @POST("/mobile/shop/findMember")
    Call<ResultDO<Fans>> findMember(@Field("mobile") String mobile);


    /**
     *
     * @param appCode user用户 manage管理版
     * @param versionCode
     * @return
     */
    @FormUrlEncoded
    @POST("/mobile/version/getApkInfo")
    Call<ResultDO<Version>> checkVersion(@Field("appCode") String appCode, @Field("versionCode") int versionCode);

    /**
     * 添加会员
     *
     */
    @FormUrlEncoded
    @POST("/mobile/shop/addMember")
    Call<ResultDO> addMember(@Field("memberId") long memberId, @Field("mobile")String mobile,
                                 @Field("code")String code);

    /**
     *
     *产品列表
     * 1.已上架
     */
    @FormUrlEncoded
    @POST("/mobile/shop/productList")
    Call<ResultDO<List<BizShopSet>>> getProductList(@Field("sellerId") long sellerId, @Field("status")int status,
                                                    @Field("pageNo")int pageNo, @Field("pageSize")int pageSize);



    /**
     *
     *产品列表
     * 1.已上架
     */
    @FormUrlEncoded
    @POST("/mobile/member/huaiYaScoreBack")
    Call<ResultDO> huaiYaScoreBack(@Field("memberId") long memberId, @Field("num")String num);



}
